/* 读取鼠标应用编程 */
#include <stdio.h> 
#include <stdlib.h> 
#include <sys/types.h> 
#include <sys/stat.h> 
#include <fcntl.h> 
#include <unistd.h> 
#include <linux/input.h>

int main(int argc,char **argv)
{
    struct input_event in_ev = {0};
    int fd = -1;
    /* 校验传参 */
    if(2 != argc) {
        fprintf(stderr, "usage: %s <input-dev>\n", argv[0]); 
        exit(-1); 
    }

    /* 打开文件 */ 
    if (0 > (fd = open(argv[1], O_RDONLY))) { 
        perror("open error"); 
        exit(-1); 
    } 

    for ( ; ; ) { 
        /* 循环读取数据 */ 
        if (sizeof(struct input_event) != 
            read(fd, &in_ev, sizeof(struct input_event))) { 
            perror("read error"); 
            exit(-1); 
        } 
        if(in_ev.type == EV_REL) {
            switch(in_ev.code) {
            case 0:
                if(in_ev.value < 0)
                    printf("鼠标向左移动一个单位\n");
                else
                    printf("鼠标向右移动一个单位\n");
                break;
            case 1:
                if(in_ev.value < 0)
                    printf("鼠标向上移动一个单位\n");
                else
                    printf("鼠标向下移动一个单位\n");
                break;
            case 8:
                if(in_ev.value < 0)
                    printf("鼠标滚轮向后移动一个单位\n");
                else
                    printf("鼠标滚轮向前移动一个单位\n");
                break;
            case 11:
                if(in_ev.value < 0)
                    printf("鼠标滚轮向左移动一个单位\n");
                else
                    printf("鼠标滚轮向右移动一个单位\n");
                break;
            }
        }
    } 
    exit(0);
}